#include "LightManager.h"
#include <iostream>

using namespace std;
/*
 * Konstruktor. Bekommt die root-Gruppe übergeben und
 * erstellt ein Vektor für 8 Lichter.
 */

LightManager:: LightManager(osg::Group* root): groupOfLights(NULL),lights(8) {
	for(unsigned int i = 0; i < lights.size(); ++i){
		lights[i] = NULL;
	}
	groupOfLights = root;
}

LightManager::~LightManager(){
#ifdef DEBUG
	cout << "----- Destruiert: LightManager -----" << endl;
#endif
}

/*
 * Zugriffsmethode auf Lichter. Existiert ein Licht beim Zugriff noch nicht,
 * so wird es erstellt und dann zurückgegegen. Bereits existente Lichter werden
 * direkt zurückgegegen.
 */

osg::Light * LightManager::getOrCreateLight(const LIGHTNUMBER number) {

	if(lights[number])
		return lights[number]->getLight();

	osg::Light * light = new osg::Light();
	light->setLightNum(number);

	osg::LightSource * lightsource = new osg::LightSource();
	lightsource->setLight(light);
	lightsource->setLocalStateSetModes(osg::StateAttribute::ON);
	lightsource->setStateSetModes(*groupOfLights->getOrCreateStateSet(), osg::StateAttribute::ON);

	groupOfLights->addChild(lightsource);
	lights[number] = lightsource;

	return light;
}
